GtkScrolledWindow: Don't require proximity for track points
authorMatthias Clasen <mclasen@redhat.com>
Sat, 10 Jan 2015 02:09:22 +0000 (21:09 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 10 Jan 2015 02:15:06 +0000 (21:15 -0500)
These are hard to navigate precisely, so show wide scrollbars
right away.

gtk/gtkscrolledwindow.c

index 9c709bcd41c309222cf5cb8ada2ac2749ee5dcff..f4e85fd9905ecd6bfc330a8d09e9c83a6764936f 100644 (file)
@@ -440,7 +440,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
 
   class->scroll_child = gtk_scrolled_window_scroll_child;
   class->move_focus_out = gtk_scrolled_window_move_focus_out;
-  
+
   g_object_class_install_property (gobject_class,
                                    PROP_HADJUSTMENT,
                                    g_param_spec_object ("hadjustment",
@@ -1040,7 +1040,6 @@ captured_event_cb (GtkWidget *widget,
   GtkScrolledWindow *sw;
   GdkInputSource input_source;
   GdkDevice *source_device;
-  gboolean indicator_close;
 
   sw = GTK_SCROLLED_WINDOW (widget);
   priv = sw->priv;
@@ -1064,17 +1063,18 @@ captured_event_cb (GtkWidget *widget,
       indicator_start_fade (&priv->hindicator, 1.0);
       indicator_start_fade (&priv->vindicator, 1.0);
 
-      /* Check whether we're hovering close to the vertical scrollbar */
-      indicator_close = check_update_scrollbar_proximity (sw, &priv->vindicator,
-                                                          event);
-
-      if (!indicator_close)
+      if (strstr (gdk_device_get_name (source_device), "TrackPoint"))
         {
-          /* Otherwise check the horizontal scrollbar */
-          check_update_scrollbar_proximity (sw, &priv->hindicator, event);
+          indicator_set_over (&priv->hindicator, TRUE);
+          indicator_set_over (&priv->vindicator, TRUE);
         }
       else
-        indicator_set_over (&priv->hindicator, FALSE);
+        {
+          if (!check_update_scrollbar_proximity (sw, &priv->vindicator, event))
+            check_update_scrollbar_proximity (sw, &priv->hindicator, event);
+          else
+            indicator_set_over (&priv->hindicator, FALSE);
+        }
     }
   else if (event->type == GDK_LEAVE_NOTIFY &&
            event->crossing.mode == GDK_CROSSING_UNGRAB)